package com.yllt4cloud.ddauth.service;

import com.yllt4cloud.common.ddbase.domain.Department;
import com.yllt4cloud.common.ddbase.result.DeptInfo;
import com.yllt4cloud.ddauth.service.base.IBaseService;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 
 * <br>
 * <b>功能：</b>IDepartmentService<br>
 * <b>作者：</b>Administrator<br>
 * <b>日期：</b> Tue Feb 12 19:50:36 CST 2019 <br>
 * <b>版权所有： 2016,yllt.com<br>
 */ 

public interface IDepartmentService extends IBaseService<Department> {

//    public Integer add(AddDepartmentParam param);
    public List<Department> getSubDepts(Integer deptId);
    public List<Integer> getSubDeptIds(Integer deptId);

    // 获取部门信息 看缓存有没有
    public Department cachedDepartmentById(Integer id);

    public List<Department> selectBottom(Department department);

//    public Page<DeptHuaDanHuiZongResult> huaDanHuiZong(Page<DeptHuaDanHuiZongResult> page, DeptHuaDanHuiZong param);

//    public int departmentTaiCiSum(DepartmentTaiCiSumParam param);

    /**
     * 根据deptId 获取他所有的下级并包含他
     * @param deptId
     * @return
     */
    public List<Integer> getSubDeptAndSelfIds(Integer deptId);

    /**
     * 根据deptIdList 获取他们所有的下级并包含他们
     * @param deptIdList
     * @return
     */
    public List<Integer> getSubDeptAndSelfIds(List<Integer> deptIdList);


    public List<DeptInfo> initAllDeptTree();

    //初始化含有员工的 部门
    public List<DeptInfo> initDeptTreeHaveClerk();


    /**
     * 初始化 商秘 标签的部门信息，并且包含对应部门的员工信息
     * @param isDisplayNoClerkDepartment   是否显示 没有员工的部门，   true  显示  false  不显示
     * @return
     */
    public List<DeptInfo>  initHaveClerkShanMiDepartment(boolean isDisplayNoClerkDepartment);


    /** 初始化 有营销页签的部门信息，并且包含对应的员工
     *  @param isDisplayNoClerkDepartment   是否显示 没有员工的部门，   true  显示  false  不显示
     *
     * @return
     */
    public List<DeptInfo> initHaveClerkYingXiaoDepartment(boolean isDisplayNoClerkDepartment);


    /**
     * 从缓存中获取部门tree
     * @return
     */
    public Map<String, List<DeptInfo>> deptTreeFromRedisCache();

    /**
     * 获取所有的部门部门，不包含员工
     * @return
     */
    public ConcurrentHashMap<String, Department> queryAllDepartFromRedis();


    /**
     * 根据员工id 查询部门信息
     * @param paramMap
     * @return
     */
    public List<Department>    queryClerkDepartment(Map<String, Object> paramMap);
}
